import { Rule, RuleType } from "@midwayjs/validate";

/**
 * 执行分配请求参数
 */
export class ExecuteAllocateDto {
  @Rule(RuleType.number().required().min(1))
  groupId: number;
}

/**
 * 导出分配结果请求参数
 */
export class ExportAllocateDto {
  @Rule(RuleType.number().required().min(1))
  groupId: number;
}

/**
 * 管理员手动分配请求参数
 */
export class ManualAllocateDto {
  @Rule(RuleType.number().required().min(1))
  teamId: number;

  @Rule(RuleType.number().required().min(1))
  teacherId: number;
}

/**
 * 获取空闲教师列表请求参数
 */
export class GetAvailableTeachersDto {
  @Rule(RuleType.number().required().min(1))
  groupId: number;
  
}

/**
 * 取消选择请求参数
 */
export class CancelAllocateDto {
  @Rule(RuleType.number().required().min(1))
  teamId: number;

  @Rule(RuleType.number().required().min(1))
  teacherId: number;
}

/**
 * 空闲教师信息
 */
export class AvailableTeacherDto {
  // 教师ID
  teacherId: number;

  // 教师姓名
  teacherName: string;

  // 教师工号
  teachId: string;

  // 最大带队数
  maxTeams: number;

  // 已带队数
  currentTeams: number;

  // 剩余名额
  availableSlots: number;
}

/**
 * 匹配结果响应数据
 */
export class AllocateResultDto {
  // 总队伍数
  totalTeams: number;

  // 志愿匹配成功的队伍数
  volunteerMatchedTeams: number;

  // 随机分配的队伍数
  randomMatchedTeams: number;

  // 未分配的队伍数
  unmatchedTeams: number;

  // 详细匹配记录
  matchDetails: Array<{
    teamId: number;
    teamName: string;
    teacherId: number;
    teacherName: string;
    score: number;
    matchType: 'volunteer' | 'random'; // 匹配类型：志愿匹配或随机分配
  }>;
}
